package main

import (
	"fmt"
	"golang.org/x/sys/windows/registry"
	"os"
	"path/filepath"
)

// 添加程序到开机启动
func addProgramToStartup(programPath string, appName string) error {
	// 将程序路径转换为绝对路径
	exePath, err := filepath.Abs(programPath)
	if err != nil {
		return fmt.Errorf("获取绝对路径失败: %w", err)
	}

	// 打开注册表项
	key, _, err := registry.CreateKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Run`, registry.SET_VALUE)
	if err != nil {
		return fmt.Errorf("打开注册表失败: %w", err)
	}
	defer key.Close()

	// 设置程序开机启动
	err = key.SetStringValue(appName, exePath)
	if err != nil {
		return fmt.Errorf("设置注册表值失败: %w", err)
	}

	return nil
}

func main() {
	// 获取当前程序的绝对路径
	exePath, err := os.Executable()
	if err != nil {
		fmt.Println("获取当前程序路径失败:", err)
		return
	}

	// 获取当前程序目录
	exeDir := filepath.Dir(exePath)

	// AutoRunGateway.bat 的路径
	batPath := filepath.Join(exeDir, "AutoRunGateway.bat")

	// 添加当前程序到启动项
	err = addProgramToStartup(exePath, "华弈新能源网关守护程序")
	if err != nil {
		fmt.Println("添加当前程序到开机启动失败:", err)
	} else {
		fmt.Println("已将当前程序添加到开机启动")
	}

	// 添加 AutoRunGateway.bat 到启动项
	err = addProgramToStartup(batPath, "AutoRunGateway")
	if err != nil {
		fmt.Println("添加 AutoRunGateway.bat 到开机启动失败:", err)
	} else {
		fmt.Println("已将 AutoRunGateway.bat 添加到开机启动")
	}
}
